<template>
  <view class="login-container">
     <!-- 提示登录的图标 -->
     <uni-icons type="contact-filled" size="100" color="#AFAFAF"></uni-icons>
     <!-- 登录按钮  可以从 @getuserinfo 事件处理函数的形参中，获取到用户的基本信息 -->
     <button type="primary" class="btn-login" open-type="getUserInfo" @getuserinfo="getUserInfo">一键登录</button>
     <!-- 登录提示 -->
     <view class="tips-text">登录后尽享更多权益</view>
   </view>
</template>

<script>
  // 1. 按需导入 mapMutations 辅助函数
  import { mapMutations } from 'vuex'
  export default {
    name:"my-login",
    data() {
      return {
      };
    },
    methods: {
      // 2. 调用 mapMutations 辅助方法，把 m_user 模块中的 updateUserInfo 映射到当前组件中使用
      ...mapMutations('m_user',['updateUserInfo','updateToken','updateAddress','updateAddressFlag']),
      // 获取微信用户的基本信息
      getUserInfo(e){
        // console.log(e.detail.userInfo)
        // 判断是否获取用户信息成功
        if(e.detail.errMsg === 'getUserInfo:fail auth deny') return uni.showMsg('您取消了登录授权!')
        
        // 获取用户信息成功，e.detail.userInfo 就是用户的基本信息,将用户信息存入vuex中
        this.updateUserInfo(e.detail.userInfo)
        
        // 获取登录成功后的 Token 字符串
        this.getToken(e.detail)
      },
      
      // 调用登录接口，换取永久的Token
      async getToken(info){
        // 调用微信登录接口
        const [err,res] = await uni.login().catch(err=>err)
        if(err || res.errMsg !== 'login:ok') return uni.showMsg('登录失败！')
        //准备参数对象
        const query = {
          code: res.code,
          encryptedDate: info.encryptedDate,
          iv: info.iv,
          rawData: info.rawData,
          signature: info.signature   
        }
        // console.log(query)
        // 换取Token
        const {data: loginResult} = await uni.$http.post('/auth/weChatLogin',query)
        // console.log(loginResult)
        if(loginResult==null) return uni.showMsg("登录失败!")
        uni.showMsg("登录成功！")
        console.log(loginResult.addressDto)
        this.updateAddress(loginResult.addressDto)
        this.updateToken(loginResult.openId)
        this.updateAddressFlag(loginResult.addressFlag)
        this.updateUserInfo(loginResult)
      }
    },
    
  }
</script>

<style lang="scss">

</style>